class Solution {
 public:
  /*
  int sumOfLeftLeaves(TreeNode* root) {
      if(!root) {
          return 0;
      }
      int mid = 0;
      int left_value = sumOfLeftLeaves(root->left);
      int right_value = sumOfLeftLeaves(root->right);
      if(root->left&&!root->left->left&&!root->left->right) {
          mid = root->left->val;
      }
      return mid+left_value+right_value;
  }
  */
  // 后序遍历，迭代
  int sumOfLeftLeaves(TreeNode* root) {
    if (!root) {
      return 0;
    }
    stack<TreeNode*> st;
    st.push(root);
    TreeNode* temp;
    int ans = 0;
    while (!st.empty()) {
      temp = st.top();
      st.pop();
      if (temp->left && !temp->left->left && !temp->left->right)
        ans += temp->left->val;
    }
    if (temp->right) st.push(temp->right);
    if (temp->left) st.push(temp->left);
    return ans;
  }
};
// 平时我们解二叉树的题目时，已经习惯了通过节点的左右孩子判断本节点的属性，
// 而本题我们要通过节点的父节点判断本节点的属性。